/**
 * 企业实体类 - 多租户架构的核心实体，代表企业租户信息
 *
 * 开发人员：陈宏伟
 * 开发时间：2025-10-20 至 2025-10-25
 * 模块职责：定义企业租户的基本信息和业务属性，作为多租户数据隔离的基础实体
 *
 * 技术要点：
 * - JPA实体映射，符合多租户设计规范
 * - Lombok注解简化代码，提高开发效率
 * - JSON序列化配置，避免懒加载问题
 * - 审计字段自动管理（创建时间、更新时间）
 * - 唯一约束确保数据完整性
 *
 * 开发故事：负责企业实体的数据库设计和JPA映射实现，作为多租户架构的核心，确保企业数据的安全隔离和管理。
 */
package com.pbl.entity;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;

import javax.persistence.*;
import java.time.LocalDateTime;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "enterprises")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Enterprise {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 128)
    private String name;

    @Column(name = "credit_code", length = 64)
    private String creditCode;

    @Column(name = "contact_name", length = 64)
    private String contactName;

    @Column(name = "contact_phone", length = 32)
    private String contactPhone;

    @Column(nullable = false)
    private Integer status;

    @Column(length = 255)
    private String remark;

    @Column(name = "created_at", insertable = false, updatable = false)
    private LocalDateTime createdAt;

    @Column(name = "updated_at", insertable = false, updatable = false)
    private LocalDateTime updatedAt;
}
